#ifndef __DICTPRODUCER_HPP__
#define __DICTPRODUCER_HPP__

#include <vector>
#include <string>
#include <map>
#include <set>
#include"../include/SplitTool.hpp"

using std::vector;
using std::string;
using std::set;
using std::map;
using std::pair;

namespace wd{
//词典创建类
class DictProducer
{
public:
    DictProducer(const string& dir);//构造函数,在这里创建英文词典并存储起来
    DictProducer(const string& dir, SplitTool* splitTool);//构造函数，为处理中文
    ~DictProducer() {}//析构函数
    void buildEnDict();//创建英文字典
    void buildCnDict();//创建中文字典
    void storeDict(const char* filepath);//将词典写入文件11
    void getStopWordList();//存放停用词词集到私有数据成员_stopWordList11
    map<string,set<int>> getIndex();//获取索引
    void doIndexes(const string& indFilePath);//创建索引,并写入文件

    void showFiles()const;//查看文件路径,测试用
    void showDict()const;//查看词典,测试用

    void showStopWords(){//测试用,显示停用词集
        set<string> stopWord = getStopWordSet();
        std::ofstream ofs("../data/stopwords.txt");
        for(auto& elem : stopWord)
        {
            ofs << elem << endl; 
        }
    }
private:
    //void dealfile();//
    void getFiles();//存绝对路径
    void pushEnglishDict(const string& filepath);//英文存在vector<pair<string,int>>
    void pushChineseDict(const string& filepath);//
    string dealLine(string& line);//"ASddsa;faae"-->"asddsa faae"
    set<string>& getStopWordSet(){
        return _stopWordList;
    }  
    size_t getDictline();//在插入新词典前统计旧词典的文件行数
private:
    string _dir;
    vector<string> _files;//存文件的绝对路径
    vector<pair<string,int> > _dict;//存单词和词频
    SplitTool * _splitTool;
    map<string,set<int> > _index;
    set<string> _stopWordList;//停用词词集
    map<string,int> _wordFreqMap;//临时词典
    size_t _LineNum;//在新词典建立之前存储旧词典的行数方便建立索引
};

}
#endif

